home *** CD-ROM | disk | FTP | other *** search
/ Aminet 40 / Aminet 40 (2000)(Schatztruhe)[!][Dec 2000].iso / Aminet / util / boot / BlizKick.lha / BlizKick / Modules / romfixes.ASM < prev    next >
Assembly Source File  |  2000-09-04  |  9KB  |  435 lines

  1. ; FILE: Source:modules/romfixes.ASM          REV: 6 --- misc rom bugfixes
  2. ; History
  3. ;  0      Started 10th Dec 1999: got idea from Fixes dir in MMULib.lha
  4. ;  1      12th Dec: console device fix accidently bsr'ed two bytes off
  5. ;         -> strange console update problems & cyberguard hits, fixed
  6. ;  2      Added shell Resident patch. froze 1.19.
  7. ;  3      Fixed ramlib stack patch for V37 rom
  8. ;  4      Added ramlib msgport sigbit patch
  9. ;  5      3rd Jan 2000: Disabled resident patch, it's bugged!
  10. ;  6      7th Jan 2000: Bugfixed resident patch. No longer freezes if
  11. ;         user says `resident c:program' without `ADD' switch.
  12. ;         froze 1.20.
  13. ;
  14.  
  15. ;
  16. ; romfixes patch for BlizKick ("patch" Module)
  17. ; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  18. ;
  19. ; This patch fixes some bugs in current rom versions (including V40!)
  20. ;
  21. ; - console.device window resize bug (ever wondered why KingCON shell
  22. ;   having review buffer and menus enabled crashes on window resize?-)
  23. ;   (idea from Thor's util/boot/ConsoleFix.lha)
  24. ; - increase ram disk stack size (idea from Thor's util/boot/PatchRAM.lha)
  25. ; - increase ramlib stack size from 2k to 8k
  26. ; - make ramlib msgport use sigbit SIGBREAKB_CTRL_E instead of SIGB_SINGLE
  27. ;   (idea from Eddy Carroll's SnoopDos source code)
  28. ; - shell Resident command bug, see CyberGuard.notes / 1.11beta3
  29. ;
  30. ; Written by Harry "Piru" Sintonen.
  31. ; This source code is Public Domain.
  32.  
  33.  
  34.     include    "blizkickmodule.i"    ; Some required...
  35.  
  36.     SECTION    PATCH,CODE
  37. _DUMMY_LABEL
  38.     BK_PTC
  39.  
  40. ; Code is run with following incoming parameters:
  41. ;
  42. ; a0=ptr to ROM start (buffer)    eg. $1DE087B8
  43. ; a1=ptr to ROM start (ROM)    eg. $00F80000 (do *not* access!)
  44. ; d0=ROM lenght in bytes    eg. $00080000
  45. ; a2=ptr to _FindResident routine (will search ROM buffer for resident tag):
  46. ;    CALL: jsr (a2)
  47. ;      IN: a0=ptr to ROM, d0=rom len, a1=ptr to resident name
  48. ;     OUT: d0=ptr to resident (buf) or NULL
  49. ; a3=ptr to _InstallModule routine (can be used to plant a "module"):
  50. ;    CALL: jsr (a3)
  51. ;      IN: a0=ptr to ROM, d0=rom len, a1=ptr to module, d6=dosbase
  52. ;     OUT: d0=success
  53. ; a4=ptr to _Printf routine (will dump some silly things (errormsg?) to stdout ;-)
  54. ;    CALL: jsr (a4)
  55. ;      IN: a0=FmtString, a1=Array (may be 0), d6=dosbase
  56. ;     OUT: -
  57. ; d6=dosbase, a6=execbase
  58. ;
  59. ; Code should return:
  60. ;
  61. ; d0=true if succeeded, false if failed.
  62. ; d1-d7/a0-a6 can be trashed. a7 *must* be preserved! ;-)
  63.  
  64.     moveq    #0,d7
  65.  
  66.     cmp.w    #37,($C,a0)        ; requires V37+ rom image
  67.     blo    .exit
  68.  
  69.     lea    (regs,pc),a5
  70.     movem.l    d0/a0-a4,(a5)
  71.  
  72.     lea    (.conname,pc),a1
  73.     movem.l    (regs,pc),d0/a0
  74.     move.l    (findresident,pc),a2
  75.     jsr    (a2)
  76.     lea    (.nocon,pc),a1
  77.     tst.l    d0
  78.     beq    .err
  79.  
  80.     move.l    d0,a2
  81.     IFGT    0
  82.     move.l    (RT_INIT,a2),a2
  83.     ;test if inside rom bounds?
  84.     move.l    (rom_log,pc),d0
  85.     cmp.l    d0,a2
  86.     blo.b    .nofix
  87.     add.l    (rom_size,pc),d0
  88.     cmp.l    d0,a2
  89.     bhs.b    .nofix
  90.     ; inside rom, so generate ram buffer address
  91.     sub.l    (rom_log,pc),a2        ; -$f80000
  92.     add.l    (rom_phys,pc),a2    ; +buffer
  93. .nofix
  94.     ENDC
  95.  
  96.     lea    (.badcon,pc),a1
  97.     lea    (8192,a2),a2
  98.     move.w    #16384/2,d0
  99. .find    addq.l    #2,a2
  100.     subq.w    #1,d0
  101.     beq    .err
  102.  
  103.     cmp.l    #$2C5F45EE,(a2)
  104.     bne.b    .find
  105.     cmp.l    #$0082614C,(4,a2)
  106.     bne.b    .find
  107.     cmp.l    #$24524A92,(8,a2)
  108.     bne.b    .find
  109.     cmp.l    #$66F841EE,(12,a2)
  110.     bne.b    .find
  111.     cmp.l    #$126E2F0E,(16,a2)
  112.     bne.b    .find
  113.  
  114.     ; patch console.device bug!
  115.     move.l    #$2C5745EE,(a2)+
  116.     move.l    #$00826002,(a2)+
  117.     move.l    #$614A2452,(a2)+
  118.     move.l    #$4A9266F8,(a2)+
  119.     move.l    #$41EE126E,(a2)+
  120.  
  121.     lea    (.dosname,pc),a1
  122.     movem.l    (regs,pc),d0/a0
  123.     move.l    (findresident,pc),a2
  124.     jsr    (a2)
  125.     lea    (.nodos,pc),a1
  126.     tst.l    d0
  127.     beq    .err
  128.  
  129.     move.l    d0,a2
  130.     lea    (.badram,pc),a1
  131.     lea    (8192,a2),a2
  132.     move.w    #16384/2,d0
  133. .find2    addq.l    #2,a2
  134.     subq.w    #1,d0
  135.     beq    .err
  136.  
  137.     cmp.l    #$4878FFFF,(a2)        ; pea    (-1).w
  138.     bne.b    .find2
  139.     cmp.l    #$4878000A,(4,a2)    ; pea    (10).w
  140.     bne.b    .find2
  141.     cmp.l    #$487804B0,(8,a2)    ; pea    (1200).w
  142.     bne.b    .find2
  143.     cmp.l    #$7000222B,(12,a2)    ; moveq #0,d0 / move.l (x,a3),d1
  144.     bne.b    .find2
  145.  
  146.     ; patch ram disk stack size!
  147.     move.w    #2048,(10,a2)
  148.  
  149.  
  150.     lea    (.ramlibname,pc),a1
  151.     movem.l    (regs,pc),d0/a0
  152.     move.l    (findresident,pc),a2
  153.     jsr    (a2)
  154.     lea    (.noramlib,pc),a1
  155.     tst.l    d0
  156.     beq    .err
  157.  
  158.     move.l    d0,a3
  159.     move.l    d0,a2
  160.  
  161.     lea    (.badramlib,pc),a1
  162.     move.w    #2048/2,d0
  163. .find3    addq.l    #2,a2
  164.     subq.w    #1,d0
  165.     beq.b    .try_37
  166.  
  167.     cmp.l    #$2608E48B,(a2)
  168.     bne.b    .find3
  169.     cmp.l    #$7808E19C,(4,a2)
  170.     bne.b    .find3
  171.     cmp.l    #$4EAEFF76,(8,a2)
  172.     bne.b    .find3
  173.  
  174.     ; patch ramlib stack size! (v39+)
  175.     move.w    #$7820,(4,a2)
  176.     bra.b    .was_39plus
  177.  
  178.  
  179. .try_37    move.l    a3,a2
  180.     move.w    #2048/2,d0
  181. .find3_37    addq.l    #2,a2
  182.     subq.w    #1,d0
  183.     beq    .err
  184.  
  185.     cmp.l    #$283C0000,(a2)
  186.     bne.b    .find3_37
  187.     cmp.l    #$08004EAE,(4,a2)
  188.     bne.b    .find3_37
  189.     cmp.l    #$FF762C5F,(8,a2)
  190.     bne.b    .find3_37
  191.  
  192.     ; patch ramlib stack size! (v37)
  193.     move.w    #$2000,(4,a2)
  194. .was_39plus
  195.  
  196.     lea    (.badramlib_b,pc),a1
  197.     move.w    #4096/2,d0
  198. .find3b    addq.l    #2,a3
  199.     subq.w    #1,d0
  200.     beq    .err
  201.  
  202.     cmp.l    #$246E0114,(a3)
  203.     bne.b    .find3b
  204.     cmp.w    #$2B4A,(4,a3)
  205.     bne.b    .find3b
  206.     cmp.l    #$3B7C0004,(8,a3)
  207.     bne.b    .find3b
  208.     cmp.l    #$600841ED,(14,a3)
  209.     bne.b    .find3b
  210.  
  211.     ; patch ramlib msgport sigbit
  212.     move.w    #14,(10,a3)        ; SIGBREAKB_CTRL_E
  213.  
  214.  
  215.     lea    (.shellname,pc),a1
  216.     movem.l    (regs,pc),d0/a0
  217.     move.l    (findresident,pc),a2
  218.     jsr    (a2)
  219.     lea    (.noshell,pc),a1
  220.     tst.l    d0
  221.     beq    .err
  222.  
  223.     move.l    d0,a2
  224.     lea    (.badresident,pc),a1
  225.     lea    (8192,a2),a2
  226.     move.w    #12288/2,d0
  227. .find4    addq.l    #2,a2
  228.     subq.w    #1,d0
  229.     beq    .err
  230.  
  231.     cmp.l    #$67164AAD,(a2)
  232.     bne.b    .find4
  233.     cmp.l    #$FFD06624,(4,a2)
  234.     bne.b    .find4
  235.     cmp.l    #$202B0004,(8,a2)
  236.     bne.b    .find4
  237.     cmp.l    #$4A806A08,(12,a2)
  238.     bne.b    .find4
  239.     cmp.l    #$0C80FFFF,(16,a2)
  240.     bne.b    .find4
  241.     cmp.l    #$FC196E14,(20,a2)
  242.     bne.b    .find4
  243.     cmp.l    #$4AADFFD4,(24,a2)
  244.     bne.b    .find4
  245.     cmp.l    #$660000B6,(28,a2)
  246.     bne.b    .find4
  247.     cmp.l    #$0CAB0000,(32,a2)
  248.     bne.b    .find4
  249.     cmp.l    #$00010004,(36,a2)
  250.     bne.b    .find4
  251.  
  252.     ; patch shell resident command
  253.     move.l    #$671C4AAD,(a2)+
  254.     move.l    #$FFD06624,(a2)+
  255.     move.l    #$200B6720,(a2)+
  256.     move.l    #$202B0004,(a2)+
  257.     move.l    #$6A0C0C80,(a2)+
  258.     move.l    #$FFFFFC19,(a2)+
  259.     move.l    #$6E126002,(a2)+
  260.     move.l    #$C0DE4AAD,(a2)+
  261.     move.l    #$FFD46600,(a2)+
  262.     move.l    #$00B05380,(a2)
  263.  
  264.  
  265.     moveq    #1,d7
  266.  
  267. .err    tst.l    d7
  268.     bne.b    .exit
  269.     lea    (.errh,pc),a0
  270.     move.l    a1,-(sp)
  271.     move.l    sp,a1
  272.     move.l    (printf,pc),a2
  273.     jsr    (a2)
  274.     addq.l    #4,sp
  275. .exit    move.l    d7,d0
  276.     rts
  277.  
  278.  
  279. .errh    dc.b    'romfixes: couldn''t %s!',10,0
  280.  
  281. .nocon    dc.b    'find '
  282. .conname    dc.b    'console.device',0
  283. .badcon    dc.b    'patch console.device bug',0
  284.  
  285. .nodos    dc.b    'find '
  286. .dosname    dc.b    'dos.library',0
  287. .badram    dc.b    'patch ram disk stack size',0
  288.  
  289. .noramlib    dc.b    'find '
  290. .ramlibname    dc.b    'ramlib',0
  291. .badramlib    dc.b    'patch ramlib stack size',0
  292. .badramlib_b    dc.b    'patch ramlib msgport sigbit',0
  293.  
  294. .noshell    dc.b    'find '
  295. .shellname    dc.b    'shell',0
  296. .badresident    dc.b    'patch Resident bug',0
  297.  
  298.  
  299.     CNOP    0,2
  300. regs
  301. rom_size    ds.l    1
  302. rom_phys    ds.l    1
  303. rom_log    ds.l    1
  304. findresident    ds.l    1
  305. installmodule    ds.l    1
  306. printf    ds.l    1
  307.  
  308.     SECTION    VERSION,DATA
  309.  
  310.     dc.b    '$VER: romfixes_PATCH 1.1 (7.1.00)',0
  311.  
  312.  
  313.     IFGT    0
  314.  
  315.     ; shell/Resident bug
  316.  
  317.  
  318.     ; fixed, 2nd try
  319.  
  320. .no_REM    move.l    a2,d0            ;200A
  321.  
  322.     beq.b    .no_filepart        ;671C
  323.     tst.l    (-$0030,a5)        ;4AADFFD0
  324.     bne.b    .is_ADD            ;6624
  325.     move.l    a3,d0            ;200B
  326.     beq.b    .is_ADD            ;6720
  327.     move.l    (4,a3),d0        ;202B0004
  328.     bpl.b    .no_filepart        ;6A0C
  329.     cmp.l    #-999,d0        ;0C80FFFFFC19
  330.     bgt.b    .is_ADD            ;6E12
  331.     bra.b    .no_filepart        ;6002
  332.     dc.w    $C0DE            ;C0DE
  333. .no_filepart    tst.l    (-$002C,a5)        ;4AADFFD4    REPLACE/S
  334.     bne.w    .da_err            ;660000B0
  335.     subq.l    #1,d0            ;5380
  336.  
  337.     ble.w    .da_err            ;6F0000AA
  338. .is_ADD    move.l    (-$0028,a5),d0        ;202DFFD8    PURE/S
  339.  
  340.  
  341.  
  342.     ; rom 39.106:
  343.  
  344. .no_REM    move.l    a2,d0            ;200A
  345.  
  346.     beq.b    .no_filepart        ;6716
  347.     tst.l    (-$0030,a5)        ;4AADFFD0
  348.     bne.b    .is_ADD            ;6624
  349.     move.l    (4,a3),d0        ;202B0004    ;BUG! should test if a3=0 before!
  350.     tst.l    d0            ;4A80
  351.     bpl.b    .no_filepart        ;6A08
  352.     cmp.l    #-999,d0        ;0C80FFFFFC19
  353.     bgt.b    .is_ADD            ;6E14
  354. .no_filepart    tst.l    (-$002C,a5)        ;4AADFFD4    ;REPLACE/S
  355.     bne.w    .da_err            ;660000B6
  356.     cmp.l    #1,(4,a3)        ;0CAB000000010004
  357.  
  358.     ble.w    .da_err            ;6F0000AA
  359. .is_ADD    move.l    (-$0028,a5),d0        ;202DFFD8    ;PURE/S
  360.  
  361.  
  362.  
  363.     ; console.device bug
  364.  
  365.     ; fixed
  366.  
  367.     move.l    d7,-(sp)            ;2F07
  368.     lea    ($126E,a6),a0            ;41EE126E
  369.     move.l    a6,-(sp)            ;2F0E
  370.     move.l    ($0030,a6),a6            ;2C6E0030
  371.     jsr    (_LVOObtainSemaphore,a6)    ;4EAEFDCC
  372.  
  373.     move.l    (sp),a6                ;2C57
  374.     lea    ($0082,a6),a2            ;45EE0082
  375.     bra.b    .in                ;6002
  376. .loop    bsr.b    cd_processwindow        ;614A
  377. .in    move.l    (a2),a2                ;2452
  378.     tst.l    (a2)                ;4A92
  379.     bne.b    .loop                ;66F8
  380.     lea    ($126E,a6),a0            ;41EE126E
  381.  
  382.     move.l    ($0030,a6),a6            ;2C6E0030
  383.     jsr    (_LVOReleaseSemaphore,a6)    ;4EAEFDC6
  384.     move.l    (sp)+,a6            ;2C5F
  385.     move.l    (sp)+,d7            ;2E1F
  386.  
  387.  
  388.     ; rom 37.300:
  389.  
  390.     move.l    d7,-(sp)            ;2F07    ;start here:
  391.     lea    ($126E,a6),a0            ;41EE126E
  392.     move.l    a6,-(sp)            ;2F0E
  393.     move.l    ($0030,a6),a6            ;2C6E0030
  394.     jsr    (_LVOObtainSemaphore,a6)    ;4EAEFDCC
  395.  
  396.     move.l    (sp)+,a6            ;2C5F
  397.     lea    ($0082,a6),a2            ;45EE0082    ;BUG: the console.device bug
  398. .loop    bsr.b    cd_processwindow        ;614C
  399.     move.l    (a2),a2                ;2452
  400.     tst.l    (a2)                ;4A92
  401.     bne.b    .loop                ;66F8
  402.     lea    ($126E,a6),a0            ;41EE126E
  403.     move.l    a6,-(sp)            ;2F0E
  404.  
  405.     move.l    ($0030,a6),a6            ;2C6E0030
  406.     jsr    (_LVOReleaseSemaphore,a6)    ;4EAEFDC6
  407.     move.l    (sp)+,a6            ;2C5F
  408.     move.l    (sp)+,d7            ;2E1F
  409.  
  410.  
  411.     ; rom 40.68:
  412.  
  413.     move.l    d7,-(sp)            ;2F07
  414.     lea    ($126E,a6),a0            ;41EE126E
  415.     move.l    a6,-(sp)            ;2F0E
  416.     move.l    ($0030,a6),a6            ;2C6E0030
  417.     jsr    (_LVOObtainSemaphore,a6)    ;4EAEFDCC
  418.  
  419.     move.l    (sp)+,a6            ;2C5F
  420.     lea    ($0082,a6),a2            ;45EE0082
  421. .loop    bsr.b    cd_processwindow        ;614C
  422.     move.l    (a2),a2                ;2452
  423.     tst.l    (a2)                ;4A92
  424.     bne.b    .loop                ;66F8
  425.     lea    ($126E,a6),a0            ;41EE126E
  426.     move.l    a6,-(sp)            ;2F0E
  427.  
  428.     move.l    ($0030,a6),a6            ;2C6E0030
  429.     jsr    (_LVOReleaseSemaphore,a6)    ;4EAEFDC6
  430.     move.l    (sp)+,a6            ;2C5F
  431.     move.l    (sp)+,d7            ;2E1F
  432.  
  433.  
  434.     ENDC
  435.